package br.com.webhomesites.locacao.presenter;

import br.com.webhomesites.locacao.contracts.ILocacaoView;
import br.com.webhomesites.locacao.model.LocacaoBO;
import br.com.webhomesites.locacao.view.DevolucaoView;
import br.com.webhomesites.padrao.model.ProdutoDAO;
import br.com.webhomesites.padrao.utils.Mascarador;
import br.com.webhomesites.principal.EmissaoRelatorios;
import java.awt.event.*;

public class DevolucaoPresenterActionListeners {

    static class DevTotComPagActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public DevTotComPagActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.DEVTOTCOMPAG_STRATEGY);
            presenter.getOperacao().execute();
            presenter.habilitarEdicao(true);

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();

//            view.enableBtnInserirItem(true);
//            view.enableBtnRemoverItem(true);
//            view.enableBtnCancelarLocacao(true);
//            view.enableBtnSalvarLocacao(true);
//            //view.enableBtnAlterar(true); 

        }
    }

    static class DevTotComPagERenovActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public DevTotComPagERenovActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.DEVTOTCOMPAGERENOV_STRATEGY);
            presenter.getOperacao().execute();

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();
             
//            view.clearFieldsPainelLocacao();
//            view.setComboClientesFocus();
//            
//            view.enableBtnNovaLocacao(true);
//            view.enableBtnCancelarLocacao(false);
//            view.enableBtnSalvarLocacao(false);


        }
    }

    static class DevTotComPagDepoisActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public DevTotComPagDepoisActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();

            view.clearFields();

            //presenter.habilitarEdicao(false);  
//            view.clearFieldsPainelIncluirProdutos();
//            view.setComboProdutosFocus();
//            
//            view.enableBtnInserirItem(true);
//            view.enableBtnRemoverItem(false);
//            view.enableBtnCancelarItem(false);
//            view.enableBtnSalvarItem(false);

        }
    }

    static class DevParcComPagActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public DevParcComPagActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.DEVPARCCOMPAG_STRATEGY);
            presenter.getOperacao().execute(); 

            //setUpViewListeners();

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();

//            view.enableBtnNovaLocacao(true);
//            view.enableBtnCancelarLocacao(false);
//            view.enableBtnSalvarLocacao(false);
//            view.enableBtnSalvarItem(false);
//            view.enableBtnCancelarItem(false);
//            view.enableBtnRemoverItem(false);
//            view.enableBtnInserirItem(true);

            System.out.println("Passou na ação salvar!");

        }
    }

    static class DevParcSemPagActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public DevParcSemPagActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.DEVPARCSEMPAG_STRATEGY);
            presenter.getOperacao().execute();
            //presenter.setOperacao(presenter.INSERT_ITEM_STRATEGY);
            //presenter.habilitarEdicao(false);  

            //setUpViewListeners();

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();

//            view.enableBtnInserirItem(true);
//            view.enableBtnSalvarItem(false);
//            view.enableBtnCancelarItem(false);
//            view.enableBtnRemoverItem(false);
//
//            System.out.println("Passou na ação salvar!");

        }
    }

    static class BuscarLocacaoActionListener implements ActionListener {

        private DevolucaoPresenter presenter;
   
        public BuscarLocacaoActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.getOperacao().execute();
            //presenter.novoLocacao();

            DevolucaoView view = (DevolucaoView) presenter.getDevolucaoView();
            
            presenter.habilitarEdicao(true);
//            view.clearFieldsPainelLocacao();
//            view.clearFieldsPainelIncluirProdutos();
//
//            Calendar cal = Calendar.getInstance();
//            Date date = cal.getTime();
//            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
//
//            view.setDataLocacao(formatter.format(date));
//
//            view.enableBtnNovaLocacao(false);
//            view.enableBtnSalvarLocacao(true);
//            view.enableBtnCancelarLocacao(true);
//            
//            view.enableBtnInserirItem(false);
//            view.enableBtnSalvarItem(false);
//            view.enableBtnRemoverItem(false);
//            view.enableBtnCancelarItem(false);
//            
//            codigoLocacao = codigoLocacao + 1;
//            view.setCodigoLocacao(codigoLocacao);
//            view.clearTableItensLocacao();
        }
    }

    
    static class CampoKeyListener implements KeyListener {

        private LocacaoPresenter presenter;
        ILocacaoView view;
        Mascarador mask;

        public CampoKeyListener(LocacaoPresenter presenter) {
            this.presenter = presenter;
            this.view = (ILocacaoView) presenter.getLocacaoView();
            mask = new Mascarador();
        }

        @Override
        public void keyTyped(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyPressed(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyReleased(KeyEvent e) {

            view.setDataLocacao(mask.getMascara(view.getDataLocacao(), mask.RG, e));
            view.setDataPrevDevolucao(mask.getMascara(view.getDataPrevDevolucao(), mask.CNPJ, e));
        }
    }

    static class ComboStateListener implements ItemListener {

        private LocacaoPresenter presenter;
        ILocacaoView view;

        public ComboStateListener(LocacaoPresenter presenter) {
            this.presenter = presenter;
            this.view = (ILocacaoView) presenter.getLocacaoView();

        }

        @Override
        public void itemStateChanged(ItemEvent ie) {

            System.out.println("Mudou de estado");
            ProdutoDAO produtoDAO = new ProdutoDAO();
            presenter.updateViewItemFromProdutoModel(produtoDAO.findByDescricaoUnica(view.getDescricaoItemLocacao()));
        }
    }

    static class EnterListener implements ActionListener {

        private LocacaoPresenter locacaoPresenter;

        public EnterListener(LocacaoPresenter locacaoPresenter) {
            this.locacaoPresenter = locacaoPresenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            LocacaoBO locacaoBO = new LocacaoBO();
            locacaoBO.calcularDataPrevDevolucao(locacaoPresenter, null);
            System.out.println("Passou na ação");
        }
    }
    
    static class TableLocacoesMouseListener extends MouseAdapter {  
        private DevolucaoPresenter devolucaoPresenter;  
          
        public TableLocacoesMouseListener(DevolucaoPresenter devolucaoPresenter) {  
            this.devolucaoPresenter = devolucaoPresenter;  
        }  
          
        @Override
        public void mouseClicked(MouseEvent e) {  
            System.out.println("Ação sendo ouvida pela tabela de locações!");
            devolucaoPresenter.updateViewFromJTableLocacao();
                           
            //LocacaoPresenter.habilitarEdicao(false);
              
//            ILocacaoView locacaoView = (LocacaoView)locacaoPresenter.getLocacaoView();  
//              
//            locacaoView.enableBtnCancelarItem(false);  
//            locacaoView.enableBtnSalvarItem(false);  
//            locacaoView.enableBtnInserirItem(true);
//            locacaoView.enableBtnRemoverItem(true);         
        
        }  
    }
    
    static class TableItensLocacaoMouseListener extends MouseAdapter {  
        private DevolucaoPresenter devolucaoPresenter;  
          
        public TableItensLocacaoMouseListener(DevolucaoPresenter devolucaoPresenter) {  
            this.devolucaoPresenter = devolucaoPresenter;  
        }  
          
        @Override
        public void mouseClicked(MouseEvent e) {  
            System.out.println("Ação sendo ouvida pela tabela de locações!");
            //JOptionPane.showMessageDialog(null, "Ouvindo os cliques!");
            //devolucaoPresenter.updateModelLocacaoFromJTable();
                           
            //LocacaoPresenter.habilitarEdicao(false);
              
//            ILocacaoView locacaoView = (LocacaoView)locacaoPresenter.getLocacaoView();  
//              
//            locacaoView.enableBtnCancelarItem(false);  
//            locacaoView.enableBtnSalvarItem(false);  
//            locacaoView.enableBtnInserirItem(true);
//            locacaoView.enableBtnRemoverItem(true);         
        
        }  
    }
    
    static class EmitirReciboDevolucaoActionListener implements ActionListener {

        private DevolucaoPresenter presenter;

        public EmitirReciboDevolucaoActionListener(DevolucaoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            try {
                Long n = presenter.getDevolucaoView().getCodigoLocacao();
                Integer n1 = Integer.valueOf(n.toString());
                EmissaoRelatorios teste = new EmissaoRelatorios();

                teste.imprimirReciboDevolucaoParcial(n1);

//                ILocacaoView view = presenter.getLocacaoView();
//
//                view.enableBtnAprovarLocacao(true);

            } catch (Exception e) {
                System.out.println("Capacidade do Integer estourou.");
            }
        }
    }
    
}
